"""
题目9: 函数定义
难度: ★★☆☆☆
类型: 函数

要求:
1. 定义一个函数greet(name)，输出"Hello, {name}!"
2. 定义一个函数add(a, b)，返回两个数的和
3. 定义一个函数multiply(a, b)，返回两个数的积
4. 定义一个函数calculate_bmi(weight, height)，计算BMI指数
5. 定义一个函数is_even(num)，判断数字是否为偶数
6. 定义一个函数factorial(n)，计算阶乘
7. 调用所有函数并输出结果

提示:
- 使用def关键字定义函数
- 使用return语句返回值
- 函数可以有参数和返回值
- 可以定义默认参数

示例输出:
Hello, 张三!
5 + 3 = 8
4 * 7 = 28
BMI: 22.86
8是偶数: True
5的阶乘: 120
"""

# 请在下面编写你的代码
# 1. 问候函数
def greet(name):
    print(f"Hello, {name}!")

# 2. 加法函数
def add(a, b):
    return a + b

# 3. 乘法函数
def multiply(a, b):
    return a * b

# 4. BMI计算函数
def calculate_bmi(weight, height):
    return weight / (height ** 2)

# 5. 偶数判断函数
def is_even(num):
    return num % 2 == 0

# 6. 阶乘函数
def factorial(n):
    if n == 0 or n == 1:
        return 1
    else:
        return n * factorial(n - 1)

# 调用函数
greet("张三")
print(f"5 + 3 = {add(5, 3)}")
print(f"4 * 7 = {multiply(4, 7)}")
print(f"BMI: {calculate_bmi(70, 1.75):.2f}")
print(f"8是偶数: {is_even(8)}")
print(f"5的阶乘: {factorial(5)}")

# 扩展练习：默认参数和可变参数
def greet_with_title(name, title="先生"):
    print(f"Hello, {title}{name}!")

def sum_all(*args):
    return sum(args)

def create_person(name, age, **kwargs):
    person = {"name": name, "age": age}
    person.update(kwargs)
    return person

print("\n=== 扩展练习 ===")
greet_with_title("李四")
greet_with_title("王五", "女士")
print(f"求和: {sum_all(1, 2, 3, 4, 5)}")
person = create_person("赵六", 30, city="北京", job="程序员")
print(f"人员信息: {person}") 